local skynet = require "skynet"
local socket = require "skynet.socket"
local mysql = require "skynet.db.mysql"

local db= nil

--param:fd-与客户端连接的socketfd, addr-客户端IP:port
function connect(fd, addr)
    --启用连接, 开始接收客户端的数据
    print("socketfd is "..fd.." connected addr="..addr)
    socket.start(fd)
    --消息处理
    while true do
        local readdata = socket.read(fd)
		--正常接收
		if readdata ~= nil then
			--返回留言板内容
			if readdata == "get\r\n" then
				local res = db:query("select * from msgs")
				for i, v in pairs(res) do
					socket.write(fd, v.id.." "..v.text.."\r\n")
				end
			--留言
			else
                --正则表达式：
                --(pattern) 匹配pattern并获取这一匹配
                --. 匹配除"\n"和"\r"之外的任何单个字符
                --* 匹配前面的子表达式任意次。
				local data = string.match(readdata, "set (.*)\r\n")
                print("recv msgType", type(data), "msg", data)
                if data then
                    --数据库表那边要将id列设置为自增的主键, 或者不设主键
				    db:query("insert into msgs(id, text) values("..fd..", \'"..data.."\')")
                end
			end
        --断开连接
        else
            print("close socketfd: "..fd)
            socket.close(fd)
        end
	end
end

skynet.start(function()
    --网络监听
    local listenfd = socket.listen("0.0.0.0", 8888)
    socket.start(listenfd, connect)
    --连接数据库
    db=mysql.connect({
            host="127.0.0.1",
            port=3306,
            database="message_board",
            user="root",
            password="123456",
            max_packet_size = 1024 * 1024,
            on_connect = nil
        })
end)